 

"""
Please note, this code is only for python 3+. If you are using python 2+, please modify the code accordingly.
"""
import tensorflow as tf
import numpy as np #科学计算的模块

# create data
x_data = np.random.rand(100).astype(np.float32) #生成100个随机数列，数据类型是float32，tf中大多数都用的是float32
y_data = x_data*0.1 + 0.3  #0.1为权重，0.3为偏置

### create tensorflow structure start ###
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))#用Variable初始化Weights权重变量-随机数列生成-1到1的1维数据，
biases = tf.Variable(tf.zeros([1])) #偏置初始化为0，

y = Weights*x_data + biases  #所要预测的y，通过训练使得y逼近真实的y_data，优化得到的参数变量就即Weights和biases

loss = tf.reduce_mean(tf.square(y-y_data)) #预测的y和实际的y_data的差别，即均方差
optimizer = tf.train.GradientDescentOptimizer(0.5) #用tf的梯度下降优化器减少误差loss，提升参数的准确度，0.5为学习效率（一般小于1）
train = optimizer.minimize(loss)                   #训练以减少误差

init = tf.global_variables_initializer() #初始化tf结构图中的所有变量，这里是Weights和biases
### create tensorflow structure end ###

sess = tf.Session() #激活创建的结构图，Sesssion是神经网路的执行命令的对话控制
sess.run(init)      #激活init，也就是所有结构

for step in range(201):#让神经网络一步一步的训练 201步
    sess.run(train)    # 开始训练
    if step % 20 == 0:  #每间隔20步打印以下训练得到的变量值
        print(step, sess.run(Weights), sess.run(biases))


